package com.java.basis.sort;

/**
 * 在使用二分查找的时候
 * 左边界 + 有边界有时候会出现溢出的情况，怎么优化比较好
 */
public class IntegerOverFlow {
    public static void main(String[] args) {
        int l = 0;
        int r = Integer.MAX_VALUE - 1;
//        int m = (l + r) / 2;
        int m = (l + r) >>> 1;
        System.out.println(m);

        //在右侧
        //中间值优化
        //第一种
//            m = (l + r) / 2;// l/2 + r/2  ==> l + (-l/2 + r/2)  ==> l + (r-l)/2,所以获取中间值可以使用以下代替，防止l+ r大于最大值，导致溢出
//            m = l + (r - l) / 2;//第一种
        //第二种使用位运算，向右移动一位
//        m = (l + r) >>> 1;//第二种，这种运算更加的快,效率要比除法要高
        l = m + 1;
//        m = (l + r) / 2;
        m = (l + r) >>> 1;
        System.out.println(m);



    }
}
